package com.tf_cut.backend.platform.vo;

import java.sql.Timestamp;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import com.tf_cut.backend.platform.vo.GrantReceiptVo.GrantReceiptVoBuilder;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor	//无参数构造函数，不加会在bean copy时报错
@AllArgsConstructor //全参数构造函数
@Builder			//有全参数构造函数时，可以使用builder方式new 对象
@Data
public class GrantRefundVo {
	
	@Id
	private String id;
	
    private String isvOrgId;

    /**
     * 退款付方类型，即原支付单收方, 商户(MERCHANT)、 平台(PLATFORM)
     */
    private String participantType;

    /**
     * 退款付方id，即原支付单收方
     * <p>
     * 如果是商户，则填入merchantId,
     * 如果是平台，则填入isvOrgId
     */
    private String participantId;

    /**
     * 关联网商订单号
     */
    private String relateOrderNo;

    /**
     * 关联网商支付流水号
     * <p>
     * 如果大额来账创建订单类型为单次订单，可不填
     * 如果大额来账创建订单类型为订单累计，则必填
     */
    private String relateTransNo;

    /**
     * 退款网商订单号
     */
    private String refundOrderNo;

    /**
     * 渠道退款单号（聚合 ）
     */
    private String channelRefundOrderNo;

    /**
     * 退款外部交易号
     * <p>
     * 由合作方生成，同笔退款交易，交易状态未明需要重试时，使用同一个交易号。
     */
    private String outRefundNo;

    /**
     * 订单退款金额,向渠道退款金额。
     */
    private String refundAmount;

    /**
     * 币种，必须同原交易
     */
    private String currency;

    /**
     * 状态(SUCCESS, FAIL)
     */
    private String status;

    /**
     * 商户实际退款金额
     * 聚合且退款成功时时出现
     */
    private String participantActualRefundAmount;

    /**
     * 退款完成时间（成功时出现）
     * YYYYMMDDhhmmss
     */
    private String refundFinishDate;

    /**
     * 错误码 FAIL时出现
     */
    private String errorCode;

    /**
     * 错误描述
     */
    private String errorDesc;

    /**
     * 扩展信息,Map的json序列化后Base64
     */
    private String extInfo;

    /**
     * 备注
     */
    private String memo;
    
    private Timestamp askTime;

}
